#include <iostream>
#include<sys/time.h>
#include<unistd.h>
#include <cstdlib>
using namespace std;
const int N=4000;
float m[N][N];
void m_reset()
 {
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<i;j++)
            m[i][j]=0;
        m[i][i]=1.0;
        for(int j=i+1;j<N;j++)
            m[i][j]=rand()%100;
    }
    for(int k=0;k<N;k++)
        for(int i=k+1;i<N;i++)
            for(int j=0;j<N;j++)
                m[i][j]+=m[k][j];
}
void func()
{
        int k,j,i;
        for(k=0;k<N;k++)
        {
                for(j=k+1;j<N;j++)
                {
                        m[k][j]=m[k][j]/m[k][k];
                }
                m[k][k]=1.0;
                for(i=k+1;i<N;i++)
                {
                        for(j=k+1;j<N;j++)
                        {
                                m[i][j]=m[i][j]-m[i][k]*m[k][j];
                        }
                        m[i][k]=0;
                }
        }
}
int main()
{
	m_reset();

        struct  timeval   tv_begin,tv_end;
        unsigned  long serial_time;

        gettimeofday(&tv_begin,NULL);
        func();
        gettimeofday(&tv_end,NULL);
        serial_time=1000000 * (tv_end.tv_sec-tv_begin.tv_sec)+ tv_end.tv_usec-tv_begin.tv_usec;
        cout<<"serial_time:"<<serial_time<<endl;
}